#ifndef _CAM_CONTROLLER_PAN_H_
#define _CAM_CONTROLLER_PAN_H_

#include "math/vec2.h"
#include "math/vec3.h"
#include "cam_controller.h"
#include "input/mouse.h"

namespace camera 
{
///////////////////////////////////////////////////////
///	\brief	Mouse-based Panning Camera controller \n
///			
///////////////////////////////////////////////////////
class CamControllerPan : public CamController, public input::MouseListener
{
public:
    /**
    * Setup the controller
    */
	CamControllerPan(const math::Vec3& Acc = math::Vec3(100.0f, 0.5f, 100.0f),
					const math::Vec3& Min = math::Vec3(-1000, 20, -1000) ,
					const math::Vec3& Max = math::Vec3(1000, 120, 1000));
					
					/**
    * Delete the controller
    */
	virtual			~CamControllerPan();
    /**
    * Update the camera passed in.
    * @param _pCam  Pointer to camera to update
    */
	virtual void     Tick(AbstractCamera* _pCam, float dt);

	/// mouse inputs
	virtual void		MouseWheelMove(int WheelInfo, const math::Vec2& Pos);
	virtual void		MouseMove(const math::Vec2& From, const math::Vec2& To);

private:
	/// movement speeds
	math::Vec3			m_Speed;
	math::Vec3			m_Acceleration;

	/// what should the current zoom be approaching ?
	float				m_ZoomTarget;

	math::Vec2			m_MousePos;
	int					m_MouseWheel;

	math::Vec3			m_Min, m_Max;
};

}  // namespace camera

#endif // _CAM_CONTROLLER_PAN_H_